package cz.pecinovsky.česky.oopnz._101_;
//Příliš žluťoučký kůň úpěl ďábelské ódy

import cz.pecinovsky.česky.oopnz._000_.Run;

// %X+ <107
import cz.pecinovsky.česky.oopnz.utility.Barva;
import cz.pecinovsky.česky.oopnz.utility.IO;
// %X-

// %I1 <110a
//import cz.pecinovsky.česky.oopnz.tvary_01_výchozí.Plátno;
//import cz.pecinovsky.česky.oopnz.tvary_01_výchozí.Elipsa;
//import cz.pecinovsky.česky.oopnz.tvary_01_výchozí.Obdélník;
//import cz.pecinovsky.česky.oopnz.tvary_01_výchozí.Trojúhelník;
// %I-

// %I1 =110a
//import cz.pecinovsky.česky.oopnz.tvary_01_výchozí.Plátno;
//
//import cz.pecinovsky.česky.oopnz.tvary_02_znaji_rozhraní.Elipsa;
//import cz.pecinovsky.česky.oopnz.tvary_02_znaji_rozhraní.Obdélník;
//import cz.pecinovsky.česky.oopnz.tvary_02_znaji_rozhraní.Trojúhelník;
//import cz.pecinovsky.česky.oopnz.tvary_02_znaji_rozhraní.Přesouvač;
// %I-

// %I1 >110a <114 >115 <119
//import cz.pecinovsky.česky.oopnz.tvary_01_výchozí.Plátno;
//
//import cz.pecinovsky.česky.oopnz.tvary_02_znaji_rozhraní.Přesouvač;
//
//import cz.pecinovsky.česky.oopnz.tvary_03_implementují_ITvar.Elipsa;
//import cz.pecinovsky.česky.oopnz.tvary_03_implementují_ITvar.Obdélník;
//import cz.pecinovsky.česky.oopnz.tvary_03_implementují_ITvar.Trojúhelník;
// %I-

import cz.pecinovsky.česky.oopnz.správce.Elipsa;
import cz.pecinovsky.česky.oopnz.správce.Obdélník;
import cz.pecinovsky.česky.oopnz.správce.Trojúhelník;

import cz.pecinovsky.česky.oopnz.správce.Přesouvač;
import cz.pecinovsky.česky.oopnz.správce.SprávcePlátna;


//%%+  +++++ Konec ignorovaného počátečního textu +++++
//%X+ xxxxx Začátek přeskakovaného textu xxxxx
/*******************************************************************************
 *<pre>
 * Předchozí: _109_Test v projektu 009z_01_Tvary
 *
 * Přidáno:
 *    - testPlynuléPosuny
 *
 * Upraveno:
 *      *
 *</pre>
 */
public class Test_104_125
{    private Test_104_125() {}   static
//%X- ----- Konec přeskakovaného textu -----


/*******************************************************************************
 * Testovací třída Test slouží nácviku práce s testovacími třídami.
 *
 * Oproti minulé verzi v projektu 009z_01_Tvary:
 *    - Přibyl testPlynuléPosuny
 *
 * @author Rudolf PECINOVSKÝ
 * @version 6.03.2017 — 2010-11-08
 */
public class Test extends junit.framework.TestCase
{
//%A+ >109
    private Obdélník    obdélník0;
    private Elipsa      elipsa0;
    private Trojúhelník trojúhel0;
//%A-
    private Obdélník    obdélník1;
    private Elipsa      elipsa1;
    private Trojúhelník trojúhel1;
//%A+ >114 -115 >119
    private SprávcePlátna SP;
//%A-



//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================
//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Vytvoří test se zadaným názvem.
     *
     * @param název  Název konstruovaného testu
     */
    public Test( String název )
    {
        super(název);
    }



//== PŘÍPRAVA A ÚKLID PŘÍPRAVKU ================================================

    /***************************************************************************
     * Inicializace předcházející spuštění každého testu a připravující tzv.
     * přípravek (fixture), což je sada objektů, s nimiž budou testy pracovat.
     */
    @Override
    protected void setUp()
    {
//%I+ <107
//        obdélník1 = new Obdélník();
//        elipsa1   = new Elipsa();
//        trojúhel1 = new Trojúhelník();
//%I-
//%A+ >109
        obdélník0 = new Obdélník   ();
        elipsa0   = new Elipsa     ();
        trojúhel0 = new Trojúhelník();
//%A-
//%A+ >107
        obdélník1 = new Obdélník   (50, 50, 200, 100);
        elipsa1   = new Elipsa     (50, 50, 200, 100);
        trojúhel1 = new Trojúhelník(50, 50, 200, 100);
//%A-
//%A+ >114 -115 >119
        obdélník0.nakresli();
        elipsa0  .nakresli();
        trojúhel0.nakresli();
        obdélník1.nakresli();
        elipsa1  .nakresli();
        trojúhel1.nakresli();
//%A-
//%A+ >107
        IO.zpráva("Přípravek vytvořen");
//%A-
    }


    /***************************************************************************
     * Úklid po testu - tato metoda se spustí po vykonání každého testu.
     */
    @Override
    protected void tearDown()
    {
    }



//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== VNOŘENÉ A VNITŘNÍ TŘÍDY ===================================================
//== VLASTNÍ TESTY =============================================================
//
//     /***************************************************************************
//      *
//      */
//     public void testXXX()
//     {
//     }

    public void testPosuny()
    {
        trojúhel1.posunDolů();
        elipsa1  .posunVpravo();
        obdélník1.nakresli();
    }


    public void testPosuny2()
    {
        elipsa1  .posunDolů();
        trojúhel1.posunVpravo();
        obdélník1.nakresli();
    }

//%A+ >108

    public void testPřebarvi()
    {
        Barva BARVA_OBD = obdélník1.getBarva();
        trojúhel1.setBarva(BARVA_OBD);
        Barva.vypišZnáméNázvy();
        Barva ŠEDÁ = Barva.getBarva("šedá");
        trojúhel1.setBarva(ŠEDÁ);
        trojúhel1.setBarva(BARVA_OBD);
        IO.zpráva("Je červený, bude šedý");
        trojúhel1.setBarva(ŠEDÁ);
        IO.zpráva("Je šedý, bude mít barvu elipsy");
        trojúhel1.setBarva(elipsa1.getBarva());
    }

//%A-
//%A+ >=110z

    public void testPlynuléPosuny()
    {
        Přesouvač přesouvač = new Přesouvač(3);
        přesouvač.přesunO ( 0, 50, trojúhel1);
        přesouvač.přesunNa(50,  0, elipsa1);
        obdélník0.nakresli();
    }

//%A-
//%X+
     /** */
     public void testPřípravek() {}
//%X-
}

//%%-  ----- Začátek ignorovaného závěrečného textu -----
//%== //Takto se označí řádek, jenž bude odkomentován (vhodné např. pro importy)
//Je-li na 6 pozici mezera, odmaže se také

//== TESTY A METODA MAIN =======================================================

    /***************************************************************************
     * Třída, jejíž instance má na starosti úklid mezi jednotlivými testy,
     * který není možno zakomponovat do metody {@code tearDown()},
     * dokud nebudou studenti umět programovat.
     */
    private static class TearDown implements Run.ITD
    {
        /** {@inheritDoc} */
        @Override
        public void ukliď()
        {
//%I+ <114
//            Plátno.smažPlátno();
//%I-
            SprávcePlátna.getInstance().odstraňVše();
        }
    }


    /***************************************************************************
     * Testovací metoda.
     */
    public static void test()
    {
        Run.tests(Test.class,
                new TearDown(),
                "testPřípravek",
                "testPosuny",
                "testPosuny2",
                "testPlynuléPosuny"
                );
        System.exit(0);
    }
    /** @param args Parametry příkazového řádku - nepoužívané. */
    public static void main( String[] args )  {  test();  }
}
